﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//命名空间：防止类名冲突
namespace Tedu.ARPGDemo.Character
{
    /// <summary>
    /// 角色马达：负责角色运动
    /// </summary>
    public class CharacterMotor : MonoBehaviour
    {
        [Tooltip("旋转速度")]
        public float rotateSpeed = 5;
        private CharacterController chController;//人物控制器引用
        [Tooltip("移动速度")]
        public float moveSpeed = 2;

        private void Start()
        {
            chController = GetComponent<CharacterController>();
        }
        /// <summary>
        /// 移动
        /// </summary>
        /// <param name="targetDir">目标方向</param>
        public void Movement(Vector3 targetDir)
        {
            LookDirection(targetDir);
            //通过Unity CharacterController组件移动Move向前移动
            Vector3 dir = transform.forward;//玩家相对世界坐标系的正前方
            dir.y = -1;//模拟重力
            chController.Move(dir * Time.deltaTime * moveSpeed);
            //chController.Move(this.transform.forward * Time.deltaTime);//玩家相对世界坐标系的正前方
        }
        /// <summary>
        /// 旋转
        /// </summary>
        /// <param name="targetDir">目标方向</param>
        public void LookDirection(Vector3 targetDir)
        {
            //朝向即注视旋转到目标方向
            //transform.LookAt(targetDir);？？ 
            //以下两行是错误的,因为targetDir已经是目标方向了
            //Vector3 relativePos = targetDir - transform.position;
            //transform.rotation = Quaternion.LookRotation(relativePos);
            if (targetDir == Vector3.zero)
            {
                return;
            }
            Quaternion dir = Quaternion.LookRotation(targetDir);//注视旋转到目标方向
            transform.rotation = Quaternion.Lerp(transform.rotation,dir,Time.deltaTime * rotateSpeed);//插值旋转（由快到慢）
            //Lerp(起点，终点，比例)，rotateSpeed控制旋转速度即比例，比例可以改变由快到慢或由慢到快

            //transform.rotation = Quaternion.LookRotation(targetDir); //动作僵硬，不建议使用，建议使用插值使旋转平滑
        }
    }
}
